# **Нормализация баз данных: ключ к эффективному управлению данными**

Нормализация баз данных — это процесс структурирования данных в реляционной базе данных с целью минимизации избыточности и устранения аномалий при вставке, обновлении и удалении данных. Этот процесс состоит из нескольких этапов, каждый из которых называется "нормальной формой". Основные нормальные формы включают первую (1НФ), вторую (2НФ), третью (3НФ) и более высокие формы, такие как Бойс-Кодд нормальная форма (BCNF) и четвертая нормальная форма (4НФ).

### Первая нормальная форма (1НФ)
Первая нормальная форма требует, чтобы все столбцы в таблице содержали только атомарные (неделимые) значения и каждый столбец содержал значения одного типа данных. Это означает, что каждая запись в таблице должна быть уникальной.

Пример:
| ID | Имя     | Телефон          |
|----|---------|------------------|
| 1  | Иван    | 123-4567         |
| 2  | Анна    | 987-6543, 555-4321|

В данном случае таблица не находится в 1НФ, так как столбец "Телефон" содержит несколько значений. Чтобы привести таблицу к 1НФ, необходимо разделить телефоны на отдельные строки:

| ID | Имя     | Телефон  |
|----|---------|----------|
| 1  | Иван    | 123-4567 |
| 2  | Анна    | 987-6543 |
| 2  | Анна    | 555-4321 |

### Вторая нормальная форма (2НФ)
Вторая нормальная форма требует, чтобы таблица находилась в 1НФ и все неключевые столбцы зависели от всего первичного ключа, а не от его части. Это устраняет частичные зависимости.

Пример:
| ID | Курс    | Студент  | Оценка |
|----|---------|----------|--------|
| 1  | Математика | Иван  | A      |
| 2  | Физика  | Анна     | B      |

Если ID представляет собой составной ключ (Курс, Студент), то таблица уже находится во 2НФ, так как Оценка зависит от обоих компонентов ключа.

### Третья нормальная форма (3НФ)
Третья нормальная форма требует, чтобы таблица находилась во 2НФ и все неключевые столбцы зависели только от первичного ключа, а не от других неключевых столбцов. Это устраняет транзитивные зависимости.

Пример:
| ID | Студент | Курс       | Преподаватель |
|----|---------|------------|---------------|
| 1  | Иван    | Математика | Петров        |
| 2  | Анна    | Физика     | Иванов        |

Если Преподаватель зависит от Курса, а Курс от ID, то есть транзитивная зависимость. Чтобы привести таблицу к 3НФ, нужно разделить её:

Таблица Курсы:
| Курс       | Преподаватель |
|------------|---------------|
| Математика | Петров        |
| Физика     | Иванов        |

Таблица Студенты:
| ID | Студент | Курс       |
|----|---------|------------|
| 1  | Иван    | Математика |
| 2  | Анна    | Физика     |

### Нормальная форма Бойса-Кодда (BCNF)
BCNF — это усовершенствованная версия 3НФ, которая устраняет более сложные зависимости. Таблица находится в BCNF, если для любой зависимости X -> Y, X является суперклювом (ключом или суперключом) таблицы.

### Заключение
Нормализация баз данных важна для обеспечения целостности данных и повышения эффективности их обработки. Следование нормальным формам помогает избегать избыточности и аномалий, что делает базы данных более управляемыми и эффективными в эксплуатации.

### Примеры баз данных

**Не нормализованная**<br>
![DB](https://i.imgur.com/be26hBZ.png)

**Нормализованная**<br>
![DB](https://i.imgur.com/5IUfTHd.png)